# ZZQ
# 生成时间：2021-07-26  15.4 使用Plotly模拟掷骰子.3 随机漫步数:16
print('\n------------------字符串的驻留机制')
'''
a='python'
b="python"
 c=''python''
print(a,id(a))
print(b,id(b))
print(c,id(c))
'''
print('\n2------------------字符串的查询操作')
'''
s='hello,hello'
print(s.index('lo'))  # 3 子串第一次出现的位置，没有查到会报错
print(s.find('lo'))   # 3 子串第一次出现的位置，没有返回-1
print(s.rindex('lo')) # 9 子串最后一次出现的位置，没有报错
print(s.rfind('lo'))  # 9 子串最后一次出现的位置，没有返回-1
'''
print('\n3-----------------大小写转换')
'''
s='hello,python'
print(s.upper())  # 转换成大写，产生一个新的字符串对象
print(id(s),id(s.upper()))
'''
print('\n4-------------------字符串内容对齐操作')
'''
s='hello,python'
# 居中
print(s.center(20,'*'))  # 宽度，可选参数（默认空格）*号是填充
print(s.center(10))      # 宽度小于实际长度，原样输出
print(s.center(20))      # 第二个参数未指定，默认空格
# 左对齐
print(s.ljust(20,'*'))
# 右对齐
print(s.rjust(20,'*'))
# 右对齐，使用0填充
print(s.zfill(20))
print('-1998'.zfill(8)) # 填充到负号后面补齐8位
'''
print('\n5-------------------字符串的劈分')
'''
s='hello world python'
# 从左侧开始劈分
print(s.split())
s1='hello|world|python'
print(s1.split(sep='|'))            # sep指定劈分位置
print(s1.split(sep='|',maxsplit=1)) # maxsplit 指定劈分次数
# 从右侧开始劈分
print(s.rsplit())
print(s1.rsplit(sep='|'))
print(s1.rsplit(sep='|',maxsplit=1))
'''
print('\n6----------------------判断字符串的操作方法')
'''
s='hello,python'
# isidentifier() 判断是否为合法标识符
print('1.',s.isidentifier())    # F
print('2.','张三'.isidentifier()) # T
print('3.','hello'.isidentifier()) # T
print('4.','张三。123'.isidentifier()) # F
# isspace() 判断是否全部由空白字符组成（回车、换行、水平制表符）
print('5.','   '.isspace())  # T
print('6.','123'.isspace())  # F
#  isalpha() 判断是否由全部字母组成
print('7.','张三'.isalpha())  # T
print('8.','abd123'.isalpha())  # F
# isdecimal() 判断是否全部由十进制数字组成
print('9.','123'.isdecimal())  # T
print('10.','四 ②'.isdecimal())  # F
# isnumeric() 判断是否全部由数字组成
print('11.','四②'.isnumeric())   # T
# isalnum() 判断是否全部由字母和数字组成
print('12.','123abd'.isalnum())  # T
'''
print('\n7----------------字符串的其他操作')
'''
# replace将某个字符串内容替换
s='hello,python'
print(s.replace('python','java'))
s1='hello,python,python,python'
print(s1.replace('python','java',2))  # 替换2个 3个参数
# join将列表或元组中的字符串合并成一个字符串
lst=['hello','java','python']
print(lst)
print('|'.join(lst))            # 将元素连接成一个字符串
t=('hello','java','python')
print(t)
print(''.join(t))
'''
print('\n8-------------------字符串的比较')
'''
print('apple'>'app')  # True
print('a'>'b')        # F
print(ord('a'),chr(98))
# ==比较value，is比较id
'''
print('\n9-------------------字符串的切片操作')
'''
# 字符串不可变序列，每次切片产生新的字符串
s1='hello,world'
s2=s1[:5]           # 默认从开始
s3=s1[6:]           # 默认到结束
s4='!'
new_s=s2+s4+s3
print(s1)
print(s2)
print(s3)
print(new_s)
# 完整切片操作：[start:end:step]
print(s1[:5:1])   # 默认从开始，5结束（不包含5）步长为1
print(s1[0::2])   # 默认到结束 步长为2
print(s1[-5::1])  # 逆向-1数到-5开始 步长为1
print(s1[-1::-1]) # -1开始 步长为-1逆向操作
'''
print('\n10-------------------格式化的字符串（两种方式）')
'''
# 格式化字符串的第一种方式 % 占位符
name='张三'
age=20
print('我的名字叫%s，今年%d岁' %(name,age))
# 第二种，{} format
print('我的名字叫{0}，今年{1}岁，我真的叫{2}'.format(name,age,name))  # 0 1 2占位顺序
# 第三种方式，f-string
print(f'我的名字叫{name},今年{age}岁')
# 精度，宽度
print('%10d' % 99)  # 宽度10
print('%10.3f'%3.1415926)  # 宽度10 精度小数后三位
print('{0:.3}'.format(3.1415926))       # 表示3位数
print('{0:.3f}'.format(3.1415926))      # f小数后三位
print('{:10.3f}'.format(3.1415926))     # 宽度10 精度小数后三位
'''
print('\n11---------------------字符串的编码转换（爬虫）')
'''
# 编码：
s='天涯共此时'
print(s.encode(encoding='GBK'))   # GBK编码中，一个中文占两个字符
print(s.encode(encoding='UTF-8')) # 在UTF-8编码中，一个中文占三个字符
# 解码：（byte代表就是一个二进制数据（字节类型数据））
byte=s.encode(encoding='GBK')
print(byte.decode(encoding='GBK'))  # 编解码类型需要一致，否则报错
byte=s.encode(encoding='UTF-8')
print(byte.decode(encoding='UTF-8'))
'''
print('\n12--------------------完！')
